ナビゲーションとルーティング
Flutter は、画面間の移動と処理のための完全なシステムを提供します。
深いリンク。複雑なディープリンクを持たない小規模なアプリケーションは、Navigator
、一方、特定のディープリンクとナビゲーションを備えたアプリ
要件も使用する必要がありますRouter
ディープリンクを正しく処理するには
Android と iOS、アプリの起動時にアドレス バーとの同期を維持するには
ウェブ上で実行されています。
ディープリンクを処理するように Android または iOS アプリケーションを構成するには、次を参照してください。ディープリンク。
ナビゲーターの使用
のNavigator
ウィジェットは正しいトランジションを使用して画面をスタックとして表示します
ターゲット プラットフォーム用のアニメーション。新しい画面に移動するには、Navigator
ルートを通じてBuildContext
そして、次のような命令型メソッドを呼び出します
としてpush()
or pop()
:
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const SongScreen(song: song),
),
);
},
child: Text(song.name),
なぜならNavigator
のスタックを保持しますRoute
オブジェクト(歴史を表す)
スタック)、push()
メソッドもRoute
物体。のMaterialPageRoute
オブジェクトはのサブクラスですRoute
トランジションアニメーションを指定します
マテリアルデザイン。使用方法のその他の例については、Navigator
、に従ってくださいナビゲーションレシピFlutter クックブックから入手するか、次の Web サイトにアクセスしてください。ナビゲーターAPI
ドキュメンテーション。
名前付きルートの使用
シンプルなナビゲーションとディープリンク要件を持つアプリケーションは、Navigator
ナビゲーションとMaterialApp.routes
ディープのパラメータ
リンク:
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: {
'/': (context) => HomeScreen(),
'/details': (context) => DetailScreen(),
},
);
}
ここで指定したルートを次のように呼びます。名前付きルート。完全な例については、次のとおりです の名前付きルートでナビゲートするFlutter クックブックのレシピ。
制限事項
名前付きルートはディープリンクを処理できますが、動作は常に同じです。
カスタマイズすることはできません。新しいディープリンクがプラットフォームによって受信されると、Flutter
新しいものをプッシュしますRoute
ユーザーが現在どこにいるかに関係なく、ナビゲーターに表示されます。
Flutter は、次を使用するアプリケーションのブラウザの進むボタンもサポートしていません。 名前付きルート。これらの理由から、ほとんどの場合、名前付きルートの使用はお勧めしません。 アプリケーション。
ルーターの使用
高度なナビゲーションおよびルーティング要件を備えた Flutter アプリケーション (
各画面への直接リンクを使用する Web アプリ、または複数の画面を持つアプリNavigator
ウィジェット) のようなルーティング パッケージを使用する必要があります。go_routerができる
ルート パスを解析し、Navigator
アプリが受信するたびに、
新しいディープリンク。
ルーターを使用するには、に切り替えます。router
コンストラクター上のMaterialApp
またCupertinoApp
そしてそれを提供しますRouter
構成。ルーティングパッケージ、
そのようなgo_router、通常は、
あなたのための設定。例えば:
MaterialApp.router(
routerConfig: GoRouter(
// …
)
);
go_router のようなパッケージは宣言的な、常に表示されます ディープリンクを受信したときと同じ画面。
ルーターとナビゲーターを併用する
のRouter
とNavigator
連携して動作するように設計されています。ナビゲートできます
を使用してRouter
次のような宣言型ルーティング パッケージを介した APIgo_router
、または次のような命令型メソッドを呼び出すことによって、push()
とpop()
の上
のNavigator
。
を使用してナビゲートするとき、Router
または宣言型ルーティング パッケージ、それぞれ
ナビゲーター上のルートはページバック付き、から作成されたことを意味します。Page
を使用してpages
に関する議論Navigator
コンストラクタ。逆に、どれでも、Route
電話して作成したNavigator.push
またshowDialog
を追加しますページレスナビゲーターへのルート。ルーティング パッケージを使用している場合、ページバック付き常にディープリンク可能ですが、ページレスルート
そうではありません。
ときページバック付き Route
から削除されますNavigator
、 すべてのページレスそれ以降のルートも削除されます。たとえば、ディープリンクの場合、
を削除してナビゲートしますページバック付きナビゲーターからのルート、すべてページレス
_routes after (次の _page-backed まで)ルート)も削除されます。
ウェブサポート
を使用するアプリRouter
クラスはブラウザ履歴 API と統合して提供します
ブラウザの「戻る」ボタンと「進む」ボタンを使用するときの一貫したエクスペリエンス。
を使用してナビゲートするたびに、Router
、履歴 API エントリが
ブラウザの履歴スタック。を押すと、戻るボタンの用途逆行
時系列ナビゲーション、ユーザーが以前の場所に移動することを意味します。
を使用して表示された訪問した場所Router
。これは、ユーザーが
からページをポップしますNavigator
そしてブラウザを押します戻るボタン
前のページがスタックにプッシュバックされます。
詳しくは
ナビゲーションとルートの詳細については、以下を確認してください。 資力:
- Flutter クックブックには複数の内容が含まれていますナビゲーションレシピ方法を示すもの
使用
Navigator
。 - の
Navigator
とRouter
API ドキュメントには、その方法の詳細が記載されています。 ルーティング パッケージを使用せずに宣言型ナビゲーションをセットアップします。 - ナビゲーションを理解する、マテリアル デザイン ドキュメントのページ、 アプリ内のナビゲーションを設計するための概念を概説します。 前方、上方、および時系列のナビゲーションについての説明。
-
Flutter の新しいナビゲーションおよびルーティング システムを学習するに関する記事です。
メディア、使用方法について説明します。
Router
ウィジェットを使用せずに直接 ルーティングパッケージ。 - のルーターの設計書の動機とデザインが含まれています。 ルーターAPI。